//
//  LYJPush.h
//  LYJPushService
//
//  Created by cqck on 2021/11/10.
//

#import <Foundation/Foundation.h>

#import <UserNotifications/UserNotifications.h>

///通知complation
typedef void(^LYJPushReceiveComplation)(BOOL isFromRmote, NSNumber *badge, NSString *subtitle, NSString *body, UNNotificationSound *sound, NSString *title, NSDictionary *userInfo);

///设置alias回调complation res=-9999(极光配置错误，设置失败)
typedef void(^LYJPushAliasComplation)(NSInteger res, NSString *alias);

@interface LYJPush : NSObject

///推送功能是否授权
@property (nonatomic, assign, readonly) BOOL pushAuthGranted;

///极光唯一ID，可用于极光推送消息错误查询
@property (nonatomic, copy, readonly) NSString *jpushRegistrationID;

/**
 @brief 极光推送单例

 @return LYJPush
 */
+ (instancetype)sharedLYJPush;

/**
 @brief 是否显示调试日志(Release下需要关闭)

 @param enable 是否打开日志
 */
+ (void)enableLog:(BOOL)enable;

/**
 @brief 注册设备推送token

 @param deviceToken 设备标识
 */
+ (void)registerDeviceToken:(NSData *)deviceToken;

/**
 @brief 读取极光推送配置文件(使用配置文件方式调用次方法)

 @param fileName 主工程plist格式的文件名
 */
- (void)setConfigPlistFileName:(NSString *)fileName;

/**
 @brief 不使用配置文件配置极光推送

 @param appKey 极光appkey
 @param isProduction 是否生产模式
 */
- (void)configAppkey:(NSString *)appKey production:(BOOL)isProduction;

/**
 @brief 配置极光推送
 */
- (void)launchJPush:(NSDictionary *)launchOptions;

/**
 @brief 推送通知回调

 @param complation 回调
 */
- (void)receivePushNotification:(LYJPushReceiveComplation)complation;

/**
 @brief 设置推送别名

 @param alias 别名
 @param complation 本地回调
 */
- (void)setPushAlias:(NSString *)alias complation:(LYJPushAliasComplation)complation;

/**
 @brief 删除推送别名

 @param complation 本地回调
 */
- (void)removePushAliasComplation:(LYJPushAliasComplation)complation;

- (void)setBadge:(NSInteger)number;

/**
 @brief 添加本地推送

 @param title 推送标题
 @param body 推送内容
 @param userInfo 推送附加内容自定义
 */
+ (void)addLocalNotificationWithTitle:(NSString *)title body:(NSString *)body userInfo:(NSDictionary *)userInfo complationHandler:(void(^)(NSError *error))complationHandle;

@end
